﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
using Eventos;

namespace PConexion
{
    public class ConexionServidor : Conexion
    {
        public override bool AbrirConexion(string ipServidor, int puertoEscucha)
        {
            bool retorno = false;
            try
            {
                SocketConexion = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                IPEndPoint endpointLocal = new IPEndPoint(IPAddress.Parse(ipServidor), puertoEscucha);
                SocketConexion.Bind(endpointLocal);
                SocketConexion.Listen(100);
                retorno = true;

            }
            catch (SocketException ex)
            {
                Console.WriteLine("Conexion:ConexoinServidor.AbrirConexion: Hubo un problema al abrir el servidor.");
                retorno = false;
            }
            return retorno;
        }

        public ConexionServidor ObtenerConexionEntrante()
        {
            ConexionServidor conexionNueva = null;
            if (!this.SocketConexion.Connected)
            {
                try
                {
                    Socket nuevoSocket = this.SocketConexion.Accept();
                    conexionNueva = new ConexionServidor();
                    conexionNueva.SocketConexion = nuevoSocket;
                }
                catch (SocketException ex)
                {
                    Console.WriteLine("Conexion:ConexionServidor.ObtenerConexionEntrante: Hubo un error al aceptar una nueva conexion.");
                }

            }
            return conexionNueva;
        }

        public override void RegistrarConexionEnServidor(Eventos.Evento evento)
        {

            using (Manejador manejadorEvento = new Manejador())
            {
                /*
                if (!manejadorEvento.EnviarEventoWCF(evento))
                {
                    Console.WriteLine("Conexion:RegistrarConexionEnServidorActividad: No se pudo registrar el evento.");
                }
                else
                {
                    Console.WriteLine("Conexion:RegistrarConexionEnServidorActividad: Se pudo registrar la conexion.");
                }
                */ 
            }
        
        }

        public void RegistrarConexionServidor(String IdSesion, String IPCliente, String Texto)
        {
            Evento evento = new Evento();
            evento.IdSesion = IdSesion;
            evento.IPCliente = IPCliente;
            evento.Texto = Texto;
            evento.Comando = Evento.Comandos.CONEXION;

            Manejador manejador = new Manejador();
            manejador.EnviarEventoWCF(evento);
        }

    }
}
